<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>

    <style>
      .box {
        border: 1px soild #000;
      }

      .box span {
        display: inline-block;
        padding: 10px;
        border: 1px solid green;
      }

      .box span.active {
        color: red;
        background-color: green;
      }
    </style>
  </head>
  <body>
    <!-- 
      类与样式的绑定，其实就是直接使用 v-bind:class v-bind:style

      class与style是两个比较特殊的属性，跟普通的属性有一点不同：
        1. class 与 style 绑定多次时，会合并。其他的是覆盖。

      class与style还支持更多的语法
        1. :class="xxx"
        2. :class="对象"
        3. :class="数组"

        1. :style="xxx"
        2. :style="对象"
        3. :style="数组"
      
     -->

    <div id="app">
      <h2 :title="msg" title="hello">Hello</h2>
      <p class="box1" :class="msg">World</p>
      <p style="color: red" :style="myStyle">看我</p>

      <!-- 
        对象写法： key - 表示类型
                 value - 表示是否需要添加上这个 key 类名的一个条件
       -->
      <p :class="{key1: value1, key2: value2}">类的对象绑定写法</p>

      <!-- 
        数组写法：
          数组项目如果是字符串：    该字符串直接做为类名
          数组项目如果是数据：      该数据所指向的值是类名
          数组项目如果是对象：      按照对象的规则去生成

       -->
      <p :class="['key1', key2, { key3: value1 }]">类的数组写法</p>

      <h2>请选择你的标签</h2>
      <div class="box">
        <!-- 
          事件处理函数，不加括号，默认会收到事件对象，如果加了括号，传递什么就收到什么
          handleClick(item.id) 

         -->
        <span
          v-for="item in tags"
          :key="item.id"
          :class="{ active: curActiveTagIds.indexOf(item.id) > -1 }"
          @click="handleClick(item.id)"
        >
          {{ item.name }}
        </span>
      </div>
    </div>

    <script src="../lib/vue.js"></script>
    <script>
      const vm = new Vue({
        el: "#app",
        data: {
          msg: "world",
          myStyle: "fontSize: 20px",
          value1: true,
          value2: false,
          key2: "key2",

          tags: [
            { id: 1, name: "帅" },
            { id: 2, name: "美" },
            { id: 3, name: "又帅又美" },
          ],
          curActiveTagIds: [1, 2], // 当前高亮的TagId的集合
        },

        methods: {
          handleClick(id) {
            console.log("id", id);

            if (this.curActiveTagIds.includes(id)) {
              // 在，就移除  splice
              // 找到 id 在 curActiveTagIds 中的下标    indexOf   findIndex
              const index = this.curActiveTagIds.indexOf(id);
              this.curActiveTagIds.splice(index, 1);
            } else {
              // 不在，就添加
              this.curActiveTagIds.push(id);
            }
          },
        },
      });
    </script>
  </body>
</html>
